/**
 * 声破天支付系统
 * 处理支付流程、表单验证和支付方式选择
 */

// 订阅计划详情，从本地存储或URL参数获取
let selectedPlan = null;

// DOM加载完成后执行
document.addEventListener('DOMContentLoaded', function() {
    // 初始化计划信息
    initPlanInfo();
    
    // 初始化支付方式选择
    initPaymentMethods();
    
    // 初始化表单验证
    initFormValidation();
    
    // 处理支付按钮点击
    document.getElementById('pay-button').addEventListener('click', handlePayment);
    
    // 处理优惠券验证
    const couponButton = document.querySelector('.coupon-code button');
    if (couponButton) {
        couponButton.addEventListener('click', validateCoupon);
    }
    
    // 设置模态框按钮事件
    setupModalButtons();
});

/**
 * 初始化订阅计划信息
 * 从URL参数或本地存储中获取选择的计划
 */
function initPlanInfo() {
    // 从URL参数获取计划ID
    const urlParams = new URLSearchParams(window.location.search);
    const planId = urlParams.get('plan');
    
    // 如果URL有计划参数，从localStorage获取订阅计划详情
    if (planId) {
        const plans = JSON.parse(localStorage.getItem('premiumPlans') || '[]');
        selectedPlan = plans.find(plan => plan.id === planId);
    }
    
    // 如果没有在URL中找到或localStorage没有数据，使用默认计划
    if (!selectedPlan) {
        selectedPlan = {
            id: 'personal',
            name: '个人会员',
            price: 18,
            period: '月',
            features: ['无广告', '高音质', '离线收听', '无限跳过']
        };
    }
    
    // 更新UI显示订阅计划信息
    updatePlanDisplay();
}

/**
 * 更新UI中的计划显示信息
 */
function updatePlanDisplay() {
    // 更新计划名称
    const planNameElement = document.querySelector('.plan-details h3');
    if (planNameElement) {
        planNameElement.textContent = selectedPlan.name;
    }
    
    // 更新计划描述
    const planDescElement = document.querySelector('.plan-description');
    if (planDescElement) {
        planDescElement.textContent = `${selectedPlan.price}元/${selectedPlan.period}`;
    }
    
    // 更新价格明细
    const subscriptionPrice = document.getElementById('subscription-price');
    if (subscriptionPrice) {
        subscriptionPrice.textContent = `¥${selectedPlan.price}.00`;
    }
    
    // 更新总价
    const totalPrice = document.getElementById('total-price');
    if (totalPrice) {
        totalPrice.textContent = `¥${selectedPlan.price}.00`;
    }
}

/**
 * 初始化支付方式选择
 */
function initPaymentMethods() {
    const paymentMethods = document.querySelectorAll('.payment-method');
    const methodDetails = document.querySelectorAll('.payment-method-details');
    
    // 默认选中第一个支付方式
    if (paymentMethods.length > 0) {
        paymentMethods[0].classList.add('active');
        if (methodDetails.length > 0) {
            methodDetails[0].style.display = 'block';
        }
    }
    
    // 为每个支付方式添加点击事件
    paymentMethods.forEach((method, index) => {
        method.addEventListener('click', () => {
            // 移除所有active类
            paymentMethods.forEach(m => m.classList.remove('active'));
            // 添加当前选中的active类
            method.classList.add('active');
            
            // 隐藏所有支付方式详情
            methodDetails.forEach(detail => detail.style.display = 'none');
            // 显示当前选中的支付方式详情
            if (methodDetails[index]) {
                methodDetails[index].style.display = 'block';
            }
        });
    });
}

/**
 * 初始化表单验证
 */
function initFormValidation() {
    const cardForm = document.getElementById('card-form');
    
    if (!cardForm) return;
    
    // 信用卡号格式化
    const cardNumberInput = document.getElementById('card-number');
    if (cardNumberInput) {
        cardNumberInput.addEventListener('input', (e) => {
            // 移除非数字字符
            let value = e.target.value.replace(/\D/g, '');
            
            // 添加空格分隔
            if (value.length > 0) {
                value = value.match(/.{1,4}/g).join(' ');
            }
            
            // 限制长度
            if (value.length > 19) {
                value = value.substr(0, 19);
            }
            
            e.target.value = value;
        });
    }
    
    // 验证卡有效期格式
    const expiryInput = document.getElementById('expiry-date');
    if (expiryInput) {
        expiryInput.addEventListener('input', (e) => {
            // 移除非数字字符
            let value = e.target.value.replace(/\D/g, '');
            
            // 添加斜杠分隔
            if (value.length > 2) {
                value = value.substr(0, 2) + '/' + value.substr(2, 2);
            }
            
            // 限制长度
            if (value.length > 5) {
                value = value.substr(0, 5);
            }
            
            e.target.value = value;
        });
    }
    
    // 限制CVV为3-4位数字
    const cvvInput = document.getElementById('cvv');
    if (cvvInput) {
        cvvInput.addEventListener('input', (e) => {
            e.target.value = e.target.value.replace(/\D/g, '').substr(0, 4);
        });
    }
}

/**
 * 处理支付请求
 */
function handlePayment() {
    // 获取当前激活的支付方式
    const activeMethod = document.querySelector('.payment-method.active');
    
    if (!activeMethod) {
        showErrorModal('请选择支付方式');
        return;
    }
    
    const paymentType = activeMethod.getAttribute('data-method');
    
    // 根据支付方式进行不同的处理
    switch (paymentType) {
        case 'wechat':
            // 模拟微信支付过程
            simulatePayment('wechat');
            break;
            
        case 'alipay':
            // 模拟支付宝支付过程
            simulatePayment('alipay');
            break;
            
        case 'card':
            // 处理卡支付
            validateCardPayment();
            break;
            
        default:
            showErrorModal('未知的支付方式');
    }
}

/**
 * 验证卡支付信息
 */
function validateCardPayment() {
    const cardNumber = document.getElementById('card-number').value.replace(/\s/g, '');
    const expiryDate = document.getElementById('expiry-date').value;
    const cvv = document.getElementById('cvv').value;
    const cardHolder = document.getElementById('card-holder').value;
    
    // 简单验证
    if (!cardNumber || cardNumber.length < 16) {
        showErrorModal('请输入有效的卡号');
        return;
    }
    
    if (!expiryDate || expiryDate.length !== 5) {
        showErrorModal('请输入有效的到期日期 (MM/YY)');
        return;
    }
    
    if (!cvv || cvv.length < 3) {
        showErrorModal('请输入有效的安全码');
        return;
    }
    
    if (!cardHolder.trim()) {
        showErrorModal('请输入持卡人姓名');
        return;
    }
    
    // 模拟卡支付处理
    simulatePayment('card');
}

/**
 * 模拟支付处理过程
 * @param {string} method - 支付方式
 */
function simulatePayment(method) {
    // 显示加载状态
    document.getElementById('pay-button').textContent = '处理中...';
    document.getElementById('pay-button').disabled = true;
    
    // 模拟支付过程
    setTimeout(() => {
        // 模拟80%的成功率
        const isSuccess = Math.random() < 0.8;
        
        if (isSuccess) {
            // 支付成功处理
            handlePaymentSuccess();
        } else {
            // 支付失败处理
            handlePaymentError();
        }
        
        // 重置按钮状态
        document.getElementById('pay-button').textContent = '确认支付';
        document.getElementById('pay-button').disabled = false;
    }, 2000);
}

/**
 * 处理支付成功
 */
function handlePaymentSuccess() {
    // 保存用户Premium状态到本地存储
    const user = JSON.parse(localStorage.getItem('currentUser') || '{}');
    
    // 获取原始计划数据
    const planData = selectedPlan;
    
    // 设置Premium状态
    user.isPremium = true;
    user.premiumPlan = selectedPlan.id;
    
    // 计算到期日期（根据计划周期）
    let expiryDays = 30; // 默认30天
    if (selectedPlan.interval === '年') {
        expiryDays = 365;
    } else if (selectedPlan.interval === '季度') {
        expiryDays = 90;
    }
    
    // 设置到期日期，使用premiumExpiryDate字段
    user.premiumExpiryDate = new Date(Date.now() + expiryDays * 24 * 60 * 60 * 1000).toISOString();
    
    // 添加支付记录
    if (!user.paymentHistory) {
        user.paymentHistory = [];
    }
    
    // 创建支付记录
    const paymentRecord = {
        id: Date.now().toString(),
        date: new Date().toISOString(),
        planId: selectedPlan.id,
        planName: selectedPlan.name,
        amount: selectedPlan.discountedPrice || selectedPlan.price,
        method: getActivePaymentMethod(),
        status: '成功'
    };
    
    // 添加到支付历史
    user.paymentHistory.unshift(paymentRecord);
    
    // 保存用户数据
    localStorage.setItem('currentUser', JSON.stringify(user));
    
    // 更新多用户存储中的用户数据（如果有）
    updateUserInStorage(user);
    
    // 获取格式化的到期日期
    const formattedExpiryDate = new Date(user.premiumExpiryDate).toLocaleDateString('zh-CN', {
        year: 'numeric',
        month: 'long',
        day: 'numeric'
    });
    
    // 显示成功模态框
    showSuccessModal('支付成功', 
        `恭喜您成功升级到${selectedPlan.name}！您的会员有效期至${formattedExpiryDate}，即将享受高品质的音乐体验。`);
}

/**
 * 获取当前选择的支付方式
 */
function getActivePaymentMethod() {
    const activeMethod = document.querySelector('.payment-method.active');
    if (!activeMethod) return '未知';
    
    const paymentType = activeMethod.getAttribute('data-method');
    
    switch (paymentType) {
        case 'wechat':
            return '微信支付';
        case 'alipay':
            return '支付宝';
        case 'card':
            return '银行卡支付';
        default:
            return '其他支付方式';
    }
}

/**
 * 更新用户数据到多用户存储
 */
function updateUserInStorage(user) {
    // 获取所有用户
    const users = JSON.parse(localStorage.getItem('users') || '[]');
    
    // 查找当前用户
    const userIndex = users.findIndex(u => u.id === user.id);
    
    if (userIndex !== -1) {
        // 保留原始密码
        const password = users[userIndex].password;
        
        // 更新用户数据
        users[userIndex] = { ...user, password };
        
        // 保存回存储
        localStorage.setItem('users', JSON.stringify(users));
    }
    
    // 确保同时更新两个存储键
    localStorage.setItem('currentUser', JSON.stringify(user));
    localStorage.setItem('shengpotian_current_user', JSON.stringify(user));
}

/**
 * 处理支付失败
 */
function handlePaymentError() {
    showErrorModal('支付处理失败，请稍后重试或尝试其他支付方式');
}

/**
 * 验证优惠券
 */
function validateCoupon() {
    const couponInput = document.querySelector('.coupon-code input');
    if (!couponInput || !couponInput.value.trim()) {
        alert('请输入优惠码');
        return;
    }
    
    // 模拟优惠券验证
    const couponCode = couponInput.value.trim().toUpperCase();
    
    // 示例优惠码: SPOTIFY50, NEWUSER
    if (couponCode === 'SPOTIFY50') {
        applyCoupon(50); // 50%折扣
        alert('优惠码已应用：50%折扣');
    } else if (couponCode === 'NEWUSER') {
        applyCoupon(10); // 10元折扣
        alert('优惠码已应用：减免10元');
    } else {
        alert('无效的优惠码');
    }
}

/**
 * 应用优惠
 * @param {number} discount - 折扣金额或百分比
 */
function applyCoupon(discount) {
    // 这里简单实现折扣逻辑
    let newPrice = selectedPlan.price;
    
    if (discount >= 1) {
        // 固定金额折扣
        newPrice = Math.max(0, newPrice - discount);
    } else {
        // 百分比折扣
        newPrice = newPrice * (1 - discount / 100);
    }
    
    // 更新显示价格
    selectedPlan.discountedPrice = newPrice;
    
    const discountElement = document.getElementById('discount-amount');
    if (discountElement) {
        discountElement.textContent = `-¥${(selectedPlan.price - newPrice).toFixed(2)}`;
        discountElement.parentElement.style.display = 'flex';
    }
    
    // 更新总价
    const totalPrice = document.getElementById('total-price');
    if (totalPrice) {
        totalPrice.textContent = `¥${newPrice.toFixed(2)}`;
    }
}

/**
 * 显示成功模态框
 * @param {string} title - 标题
 * @param {string} message - 消息
 */
function showSuccessModal(title, message) {
    const modal = document.getElementById('success-modal');
    const overlay = document.getElementById('modal-overlay');
    const modalTitle = modal.querySelector('h2');
    const modalMessage = modal.querySelector('p');
    
    modalTitle.textContent = title;
    modalMessage.textContent = message;
    
    modal.style.display = 'block';
    overlay.style.display = 'block';
}

/**
 * 显示错误模态框
 * @param {string} message - 错误消息
 */
function showErrorModal(message) {
    const modal = document.getElementById('error-modal');
    const overlay = document.getElementById('modal-overlay');
    const modalMessage = modal.querySelector('p');
    
    modalMessage.textContent = message;
    
    modal.style.display = 'block';
    overlay.style.display = 'block';
}

/**
 * 设置模态框按钮事件
 */
function setupModalButtons() {
    // 成功模态框按钮
    const successButton = document.querySelector('#success-modal button');
    if (successButton) {
        successButton.addEventListener('click', () => {
            // 关闭模态框
            document.getElementById('success-modal').style.display = 'none';
            document.getElementById('modal-overlay').style.display = 'none';
            
            // 重定向到会员页面
            window.location.href = 'profile.html';
        });
    }
    
    // 错误模态框按钮
    const errorButton = document.querySelector('#error-modal button');
    if (errorButton) {
        errorButton.addEventListener('click', () => {
            // 关闭模态框
            document.getElementById('error-modal').style.display = 'none';
            document.getElementById('modal-overlay').style.display = 'none';
        });
    }
}